/**
 * 
 */
package test.mod;

import java.math.BigDecimal;
import java.util.concurrent.ConcurrentHashMap;


import hyl.core.MyDate;
import hyl.core.MyFun;
import hyl.core.MyMath;
import test.My;

/**
 * @author 邹达有
 * @mail 37798955@qq.com
 * 
 * 2022年5月27日
 * 
 */
public class 餐饮分润 {
	public static 用户 注册加盟(int 用户id,int 推荐人,int 加盟费,int 消费折扣,int 佣金比   )  {
		用户 uk=new 用户();
		uk.id=用户id;
		uk.推荐人id=推荐人;
		uk.加盟费=加盟费;
		uk.消费券=加盟费*2;
		
		//更新用户扩展表 加盟费=? ,佣金比=? ,推荐人=? ,消费券=?  where id=用户id
		return uk;
	}
	//消费折扣存入用户会话session, 或者根据角色 以0.85直接计算 折扣后金额
	public static void 消费折扣(int 消费总金额)   {
	
		BigDecimal 折后金额=MyFun.obj2Decimal(消费总金额).multiply(BigDecimal.valueOf(0.85));
		BigDecimal 优惠金额=MyFun.obj2Decimal(消费总金额).subtract(折后金额) ;
		MyFun.print(优惠金额,折后金额);
		
	}
	static ConcurrentHashMap<Integer, 用户> 用户池=new ConcurrentHashMap<Integer, 用户> ();
	public static 用户 更新用户(int id) {
	
		用户 uk=用户池.get(id);		
		if (uk==null){		
			 uk=new 用户();
			 用户池.put(id, uk);
		}
		//取出并更新用户对象
		//Select id,加盟费,佣金比,推荐人 ,消费券 where id=?
		//如果不存在 
		//用户池.remove(id);
//		uk.id=用户id;
//		uk.推荐人id=推荐人;
//		uk.加盟费=加盟费;
//		uk.佣金比=佣金比;
//		uk.消费券=加盟费*2;
		return uk;
	}
	
	
	public void 推荐佣金(用户 注册会员) {
		
		int id=注册会员.id;
		用户 u=注册会员;
	
		BigDecimal 倍数=BigDecimal.valueOf(1000);		
		int 佣金比3=30;
		int 佣金比8=80;
		int 佣金比13=130;
		int 级差 =0;
		BigDecimal  佣金比;
		while(true) {			
			用户 推荐人=用户池.get (u.推荐人id);
			if (推荐人.角色==11&&佣金比3>级差) {			
				佣金比=BigDecimal.valueOf(佣金比3).divide(倍数);
				级差=佣金比3;
			}else if (推荐人.角色==12&&佣金比8>级差) {				
				佣金比=BigDecimal.valueOf(佣金比8-级差).divide(倍数);
				级差=佣金比8;
			}else if (推荐人.角色==13&&佣金比13>级差){				
				佣金比=BigDecimal.valueOf(佣金比13-级差).divide(倍数);
				级差=佣金比13;
			}else {
				佣金比= MyMath.BD0;
			}	
			int 佣金 = BigDecimal.valueOf(u.加盟费).multiply(佣金比).intValue();
			String sqlString="insert into 奖金表 (科目,受益人,金额,日期,备注) values('佣金',?,?,?,?  )";
			Object[] values=new Object[] {u.推荐人id,佣金,MyDate.getCurrTime(),注册会员.id+"注册,佣金=["+MyMath.div(u.加盟费, 100, 2)+" 元]的3%"};
			My.getDB1().executeUpdate(sqlString, values);
			if (级差==佣金比13) return; //级差拿完 跳出循环
			id=u.推荐人id;
			u=用户池.get(id);
			if (u==null) return ; //没有推荐人 跳出循环			
		}	
	}	
	

	public void 总部利润分红(int 可分利润_分) {
		int 人数=用户池.size();
		int 分红=可分利润_分/人数;
		for (用户 u: 用户池.values()){
			String sqlString="insert into 奖金表 (科目,受益人,金额,日期,备注) values('总部分红',?,?,?,'分润')";
			Object[] values=new Object[] {u.id,分红,MyDate.getCurrTime()};
			My.getDB1().executeUpdate(sqlString, values);
		}
	}
}


class 用户{
	int id;
	int 推荐人id;
	int 门店;
	//..其他字段
	int 角色; //5000~45000 合伙人=11 ;50000以上 代理商=12  ;50000以上 运营商=13
	int 加盟费;  //精确分	
	int  消费折扣=85; //百分比
	int 消费券; 
}